<?php

require_once("../Datos/Selector.php");
require_once("../Datos/Tabla.php");

class SubConsulta extends Tabla{
	
	var $Selector;
	
	function SubConsulta(&$selector, $alias=""){
		
		$this->Selector = $selector;
		$this->esBase = 0;
		$this->Orden = 0;
		$this->Conexion = $selector->obtConexion();	
		
		$this->estArrPropiedades();
		
		$this->txtNombreTabla = $selector->obtNombre();
		$this->txtAlias = $alias;
		if($alias == ""){
			$this->txtAlias = $selector->obtNombre();
		}
		
		$this->txtTabla = "(".$selector->obtConsulta().")";
		
	}
	
	function estArrPropiedades(){
		$i=0;
		foreach($this->Selector->obtVisibles() as $visible){
			$nombre = $visible->obtNombre();
			if($visible->obtAlias() != ""){
				$nombre = $visible->obtAlias();
			}
			
			$this->arrPropiedades[$nombre]['valor']="";
			$this->arrPropiedades[$nombre]['tipo']=$visible->obtTipo();
			$this->arrPropiedades[$nombre]['primary_key']=$visible->obtEsClavePrimaria;
			$this->arrPropiedades[$nombre]['auto_increment']=$visible->obtEsAutonumerico();
			$this->arrPropiedades[$nombre]['length']=$visible->obtLongitud();
		}
	}
	
	function esttxtTabla(){
		$this->txtTabla = "(".$this->Selector->obtConsulta().")";
	}
	
	function obtarrCampos(){
		$arrCampos="";
		foreach($this->Selector->obtVisibles() as $campo){
			$propiedades = $campo->obtTabla()->obtarrCampos();
			$arrCampos[$campo->obtNombre()] = $propiedades[$campo->obtNombre()];
		}
		return $arrCampos;
	}
	
	function &obtCampo($nombreCampo, $alias=''){
		foreach($this->Selector->obtVisibles() as $campo){
			$nombre = $campo->obtNombre();
			if($campo->obtAlias() != ""){
				$nombre = $campo->obtAlias();
			}
			
			if($nombre == $nombreCampo){
				
				$vuelve = new Campo($this, $campo->obtNombre());
				$vuelve->estNombreTabla($this->txtNombreTabla);
				$vuelve->estEsBase($this->esBase);
				$vuelve->estAliasTabla($this->txtAlias);
				if($campo->obtAlias() != "" && $campo->obtAlias() != $campo->obtNombre()){
					$vuelve->estNombre($campo->obtAlias());
				}
				$vuelve->estAlias($alias);
				return $vuelve;
			}
		}
		
		die("La columna ". $nombreCampo."no existe en la subconsulta " . $this->Selector->obtNombre());
	}
	
	function &obtCamposClave(){
		foreach($this->Selector->obtVisibles() as $campo){
			$esClave = $campo->obtEsClavePrimaria();
			if($esClave == 1){
				$nombre = $campo->obtAlias();
				if($nombre == ""){
					$nombre = $campo->obtNombre();
				}
				$claves[$nombre] = &$campo;	
			}
		}
		return $claves;
	}
	
	function obtNombresClaves(){
		$nombres = array_keys($this->obtCamposClave());
		foreach($nombres as $propiedad){
			$claves[$propiedad] = "";
		}
		return $claves;
	}
}

?>